const bucket = new Set()

const data = {text: 'hello'}

const obj = new Proxy(data, {
  get(target, key) {
    bucket.add(effect)
    return target[key]
  },
  set(target, key, value) {
    target[key] = value
    bucket.forEach(fn => fn())
    return true
  }
})

function effect() {
  let value = obj.text
  console.log(value)
}

effect()
obj.text = 'world'

/**
 * 解析:
 * 监听data数据, 以obj作为代理对象
 * 执行副作用函数effect, 触发Proxy的get操作, 然后将副作用函数加入到bucket集合中
 * obj.text = 'world'出发Proxy的set操作, 从而触发副作用函数
 * 缺陷:
 * 但是这样, 副作用函数的名字就被固定死了; 接着看demo-2
 *  */ 


